﻿
namespace Levfier
{
    /// <summary>
    /// 値が変更された時のイベントハンドラ
    /// </summary>
    /// <param name="value">値</param>
    public delegate void ValueChanged(double value);

    /// <summary>
    /// VSTパラメータを管理するクラス
    /// サンプルレート
    /// 1処理のサンプル数
    /// </summary>
    public class VSTParameterManager
    {
        /// <summary>
        /// サンプルレートが変更されたことを知らせるイベントハンドラ
        /// </summary>
        public event ValueChanged SampleRateChanged;

        /// <summary>
        /// 1処理のサンプル数が変更されたことを知らせるイベントハンドラ
        /// </summary>
        public event ValueChanged SampleCountChanged;

        /// <summary>
        /// サンプルレート
        /// </summary>
        public double SampleRate { 
            get 
            {
                return this.sampleRate;
            } 
            set 
            {
                if (value != this.sampleRate)
                {
                    this.sampleRate = value;
                    if (null != this.SampleRateChanged)
                    {
                        this.SampleRateChanged(this.sampleRate);
                    }
                }
            } 
        }

        /// <summary>
        /// 1処理のサンプル数
        /// </summary>
        public int SampleCount
        {
            get
            {
                return this.sampleCount;
            }
            set
            {
                if (value != this.sampleCount)
                {
                    this.sampleCount = value;
                    if (null != this.SampleCountChanged)
                    {
                        this.SampleCountChanged(this.sampleCount);
                    }
                }
            }
        }

        /// <summary>
        /// サンプルレート
        /// </summary>
        private double sampleRate;

        /// <summary>
        /// 1処理のサンプル数
        /// </summary>
        private int sampleCount;

        /// <summary>
        /// 唯一のインスタンス
        /// </summary>
        private static VSTParameterManager singleton = new VSTParameterManager();

        /// <summary>
        /// コンストラクタ
        /// </summary>
        private VSTParameterManager()
        {
            this.sampleRate = 0.0d;
            this.SampleCount = 0;
        }

        /// <summary>
        /// インスタンスを取得する
        /// </summary>
        /// <returns>インスタンス</returns>
        public static VSTParameterManager GetInstance()
        {
            return singleton;
        }
    }
}
